package main

import (
	"gitee.com/dark.H/gs"
	"gitee.com/dark.H/gt"
)

var (
	test = gs.Str(`1232141241251251212312412512123214124125125121231241251212321412412512512123124125121232141241251251212312412512
	func (l L) Print(m gs.Str) {
1232141241251251212312412512		if m.Len() > l.Width {12521512512512512512512512512512512512512512512512512512512
12321412412512512			m = m[:l.Width]12521512512512512512512512512512512512512512512512512512512
12321412412512512		} else if m.Len() < l.Width {12521512512512512512512512512512512512512512512512512512512
12321412412512512			m = m + gs.Str(" ").Repeat(l.Width-m.Len())12521512512512512512512512512512512512512512512512512512512
12321412412512512		}12521512512512512512512512512512512512512512512512512512512
12321412412512512		gs.Str("").ANSICursor(l.Row, l.Col).Add(m).Print()12521512512512512512512512512512512512512512512512512512512
12321412412512512	}12521512512512512512512512512512512512512512512512512512512
12321412412512512	12521512512512512512512512512512512512512512512512512512512
12321412412512512	func (l L) Sprint(m gs.Str) gs.Str {12521512512512512512512512512512512512512512512512512512512
12321412412512512		if m.Len() > l.Width {12521512512512512512512512512512512512512512512512512512512
12321412412512512			m = m[:l.Width]12521512512512512512512512512512512512512512512512512512512
12321412412512512		} else if m.Len() < l.Width {12521512512512512512512512512512512512512512512512512512512
12321412412512512			m = m + gs.Str(" ").Repeat(l.Width-m.Len())12521512512512512512512512512512512512512512512512512512512
12321412412512512		}12521512512512512512512512512512512512512512512512512512512
12321412412512512		return gs.Str("").ANSICursor(l.Row, l.Col).Add(m)12521512512512512512512512512512512512512512512512512512512
12321412412512512	}12521512512512512512512512512512512512512512512512512512512
12321412412512512	}12521512512512512512512512512512512512512512512512512512512
12321412412512512	}12521512512512512512512512512512512512512512512512512512512
1232141241251251212312412512123214124125125121231241251212321412412512512123124125121232141241251251212312412512
	func (loc *PanelLoc) PrintInArea(multiline gs.Str, widths ...int) {
		width := loc.maxWidth
		if widths != nil {
			width = widths[0]
		}
		if width == 0 {
			_, width = gs.GetWindowsSize()
		}
		X := loc.X
		Y := loc.Y
	
		multiline.EveryLine(func(lineno int, line gs.Str) {
			L{
				Row:   Y + lineno,
				Col:   X,
				Width: width,
	`)
)

func main() {

	p := gt.NewPanel().SetTitle("Hello world!").DrawBuf(test).Wait(2000).Clear()
	p.SetLoc(10, 10).DrawBuf(test).Wait(1000).Clear()

	p.SetSize(50, 20).SetLoc(10, 10).DrawBuf(test).Wait(2000).Clear()

	p.SetLoc(60, 7).DrawBuf(gs.Str(test)).Wait(2000).Clear()

	for i := 0; i < 60; i++ {
		p.SetPos(i, 7).DrawBuf(gs.Str(test)).Wait(100).Clear()
	}
	for i := 0; i < 60; i++ {
		p.SetPos(60, 7+i).DrawBuf(gs.Str(test)).Wait(100).Clear()
	}

	// loc := &gt.PanelLoc{
	// 	X:     4,
	// 	Y:     4,
	// 	TItle: "hehe title",
	// }

	// loc.PrintInArea(gs.Str(test), 20, 50)
	// time.Sleep(2 * time.Second)
	// loc.ClearInArea(20, 50)
	// loc.X = 7
	// loc.Y = 7
	// loc.Xpos += 7
	// loc.TItle = "hehe title2"
	// loc.PrintInArea(gs.Str(test), 20, 50)
	// time.Sleep(2 * time.Second)
	// loc.ClearInArea(20, 50)

	// loc.X = 60
	// loc.Y = 7
	// loc.Xpos += 27
	// loc.TItle = "hehe title 3"

	// loc.PrintInArea(gs.Str(test), 20, 50)
	// time.Sleep(2 * time.Second)
	// loc.ClearInArea(20, 50)

	// loc.X = 27
	// loc.Y = 27
	// loc.Xpos += 27
	// loc.TItle = "hehe title 4"

	// loc.PrintInArea(gs.Str(test), 20, 50)
	// time.Sleep(2 * time.Second)
	// loc.ClearInArea(20, 50)

}
